iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
自我挑戰組

從零開始的AI學習之路:非本科轉職的30天挑戰記系列 第 19

D19 | 我的Side Project 每拍呷--將音檔傳給用戶篇

  • 分享至 

  • xImage
  •  

今日進度5/14:
研究如何把營養標示辨識結果與個人化建議用tts轉換成語音檔案後傳LINE給用戶。


首先,撇除掉Side Project,先單獨測試了用戶傳文字就收到語音檔的部份,是可以運作的;
但是回去Side Project,改成將營養標示辨識結果與個人化建議用tts轉換成語音檔案,卻無法成功傳至LINE給用戶呢?
👽--我
🫡--Gemini

👽為什麼單純請用戶輸入文字轉語音就可以成功、但接回營養標示辨識的程式碼就會失敗呢?
🫡你問了一個非常好的問題,這點正是許多人在開發 LINE BOT 時會遇到的挑戰!好奇為什麼單純的文字轉語音範例能成功,而整合到營養標示辨識程式碼後就會出現問題。
簡單文字轉語音 vs. 營養標示辨識的複雜度
答案在於兩者之間流程的複雜度和外部依賴的數量有顯著差異:

  1. 簡單文字轉語音的流程 (你的成功範例)
  • LINE 傳送文字訊息 -> ngrok -> 你的 Flask 應用程式。
  • 你的 Flask 應用程式接收文字。
  • 呼叫 Azure TTS API,將文字轉換成語音,並儲存為本地 output.mp3。
  • 你的 Flask 應用程式建立一個指向 ngrok 公開 URL (/audio) 的 AudioMessage。
  • LINE 伺服器 -> ngrok -> 你的 Flask 應用程式 (/audio 路由),下載 output.mp3。
  • LINE 將音訊傳送給用戶。

這個流程相對簡單直接,主要只涉及一次 Azure API 呼叫 (TTS) 和一次本地檔案伺服。

  1. 營養標示辨識的流程 (你目前的程式)
  • LINE 傳送圖片訊息 -> ngrok -> 你的 Flask 應用程式。
  • 你的 Flask 應用程式接收圖片。
  • 呼叫 Azure Document Intelligence API,上傳圖片進行 OCR 辨識,等待結果。
  • 你的 Flask 應用程式解析 OCR 結果,提取營養數據。
  • 計算個人化營養分析和建議。
  • 呼叫 Gemini LLM API,生成個人化建議文字,等待結果。
  • 組裝最終的文字報告。
  • 呼叫 Azure TTS API,將最終報告的語音內容轉換成語音,並儲存為本地 output.mp3。
  • 你的 Flask 應用程式建立一個指向 ngrok 公開 URL (/audio) 的 AudioMessage。
  • LINE 伺服器 -> ngrok -> 你的 Flask 應用程式 (/audio 路由),下載 output.mp3。
  • LINE 將音訊傳送給用戶。

👽那我的下一步要怎麼修正?
🫡(給了我超~長一串解決方法)

簡單來說,就是需要重新啟動 ngrok 並更新 URL,然後更新 LINE Developers 後台的 Webhook URL、
重新啟動你的 Flask 應用程式(詳細步驟略)

咦?這些步驟我昨天都做過了呀...算了還是再做一次看看...

/images/emoticon/emoticon04.gif

竟然成功了!我的LINE BOT可以回傳音檔給用戶了(歡呼)

然後我發現它會朗讀emoji,譬如😊它會唸「微笑的臉」,所以我請它朗讀時移除emoji,殊不知這是災難的開始,接下來測試生成的音檔全部都只朗讀營養組成、沒有朗讀個人化建議與鼓勵,我找錯誤來源找了好多次都失敗,後來發現問題應該是因為這個
tts_personalized_advice = remove_emojis(personalized_advice_text)
跟這個
text = re.sub(r'[\U000026A0\U0001F621\U0001F62C\U0001F60A\U0001F629\U0001F62F\U0001F635\U0001F92C\U0001F4AA\U0001F92B\U0001F974\U0001F35E\U0001F36C\U0001F373\U0001F9C2\U0001F35A]', '', text)

這行代碼因為匹配的 Unicode 範圍過於廣泛,導致它不僅移除了表情符號,也移除許多正常的文字內容,所以就變成空字串...所以我就暫時把移除表情符號的需求拿掉,之後再想辦法吧!


明日進度:

  1. 思考看看有什麼辦法可以簡化用戶輸入個人資訊的步驟,目前要請用戶自己用逗號隔開(女性, 60, 158 1),這樣對用戶來說不太方便。
  2. 目前文字看起來很擁擠,不利長輩閱讀。要來研究怎麼從只傳送一個對話泡泡變成傳送多個對話泡泡。

上一篇
D18 | 我的Side Project 每拍呷--LINE BOT篇
下一篇
D20 | 我的Side Project 每拍呷--優化介面篇
系列文
從零開始的AI學習之路:非本科轉職的30天挑戰記30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言